package com.example.d6_homework.homework05;

import java.lang.reflect.Method;

public class AnnotationProcessor {
    public static void main(String[] args) throws Exception {
        // 获取TestClass类的Class对象
        Class c = TestClass.class;

        // 尝试获取TestClass类上@Test注解的实例
        Test test = (Test) c.getAnnotation(Test.class);

        // 如果@Test注解存在,则执行以下逻辑
        if (test != null) {
            // 获取注解中定义的类名、方法名和参数值
            String className = test.className();
            String methodName = test.methodName();
            String paramValue = test.paramValue();

            // 通过类名动态加载类
            Class c1 = Class.forName(className);
            // 创建该类的一个实例
            Object obj = c1.getDeclaredConstructor().newInstance();

            // 根据方法名和参数类型获取方法对象
            Method method = c1.getDeclaredMethod(methodName, String.class);
            // 调用该方法,并传入参数值
            method.invoke(obj, paramValue);
        }
    }
}